查看原文
其他

预测“死亡”的AI来了,程序员们颤抖了吗?

51CTO技术栈 2018-08-04

前段时间,人工智能 AI 的快速发展掀起了舆论热潮,人们纷纷担忧,在不远的将来,自己将会把饭碗亲手送给机器人。


而如今,不但金融业、客服业、手工制造业等行业的饭碗摇摇欲坠,就连算命先生看到 AI 也要抖一抖了!

中新网 6 月 22 日电,据美国侨报网报道,日前,谷歌新出炉的一项研究报告称,该公司已开发出一种新人工智能(AI)算法,可预测人的死亡时间,且准确率高达 95%。最近,谷歌的这项研究发表在了《自然》杂志上。

这项研究自 5 月开始,由谷歌、斯坦福大学、芝加哥大学和加州大学旧金山分校共同发起,最终得到了现在这个计算病患死亡几率的人工智能模型。


据称,他们使用的数据包括了 216,221 次住院治疗,涉及 114,003 名个人患者,搜集到了超过 466 亿条数据。


谷歌还举了个例子:一位乳腺癌晚期的病人入院检查,医院电脑判断病人在住院期间死亡的概率是 9.3%,但谷歌人工智能的分析是,死亡概率 19.9%。


结果病人在入院后两周去世。就预测入院后死亡概率这件事来说,谷歌的准确率是 95%,医院传统方式的准确率只有 86%。


除此之外,这个人工智能模型还能算出其他概率,而且也都优于传统方式:

  • 预测患者是否会在医院停留很长时间的准确率:0.86(谷歌)与0.76(传统方式)。

  • 在患者出院后预测是否会再入院的准确率:0.77(谷歌)与0.70(传统方式)。


随着人工智能技术越来越成熟,各种“预言方式”正在被不断开发出来。这一瞬间仿佛人类就如同弱小的蚂蚁,人类的预测结果在 AI 面前,如同小儿科一般。


如今 AI 的发展速度我们有目共睹,但是作为一位程序员你或许会有这样的疑惑:卖力开发 AI 技术,到头来会让自己失业吗?


AI 抢程序员工作:2040 年 AI 可能代替程序员


程序员以及其他类型的 IT 工作无疑是当前最热门的工作。然而,这种趋势可能不会一直持续下去。


美国橡树岭国家实验室的一些专家预测,到 2040 年,AI 技术将会强大到足以替代程序员,AI 编写软件将比人类程序员更好、更快。换句话说,软件编写的软件比人类编写的更好。


这是怎么发生的?AI 能真正学会如何做需要高度创造性的智力工作吗?毕竟创造性一直被认为是人类特有的。AI 能学到的东西会比我们教它的更多吗?


利用人工神经网络制定编写规则


人工神经网络是一种试图模仿人类大脑学习机制的技术。它启发自真实的神经网络,并且部分地模拟真实的神经网络。我们可以试着把人类的神经系统想象成一台非常强大的计算机。

在上面这幅图中,每个神经元都有一个输入和输出,输入实际上是一系列信号的加权组合。


每个信号都有自己的数学上可表达的影响,信号的总和决定了输出。人类神经网络的特殊之处在于,它们能够基于学习和经验进行适应和改变,这意味着相同的输入并不总是产生相同的输出。


这是通过改变不同脉冲的优先次序和修改神经元之间的物理连接来完成的。这些变化通过学习算法和成本函数来指定,以提高人类适应新环境和优化未来行为的能力。


研究人工神经网络的科学家和工程师试图复制这种机制,并在软件开发中实施。具体地说,这意味着软件不会以传统的方式编写,比如一系列的“if… then”规则。


从理论上讲,我们可以想象通过渐进式学习和优化的过程,人工神经网络能够学习如何制定(或“编写”)规则,从而得到比人类编写的更好的输出。


在 AI 科学中,这被称为深度学习,通常在一定程度上依赖人类的反馈。


以下是几个可以代替程序员的应用程序。


Karpathy:利用循环神经网络自动生成代码


早在 2015 年,当时是斯坦福大学计算机科学博士生的 Andrej Karpathy 就使用循环神经网络来生成代码。


他使用了一个 Linux 存储库(所有的源文件和 headers files),将它合并成一个巨大的文档(超过 400MB 的代码),并用这些代码来训练 RNN。


他让系统跑了一晚上。第二天早上,他得到了这个:

AI 生成的代码样本


从字面上来看,AI 生成的代码包含函数和函数装饰。它有参数、变量、循环和正确的缩进形式。括号有开括号和收括号,甚至还有注释。


在这些代码中,AI 当然也犯了一些错误。有时变量从未被使用。其他时候,有些变量没有更早定义。但 Karpathy 对这个结果感到满意。


“这些代码总体上看起来非常棒。当然,我不认为它会编译,但是当你浏览生成的代码时,它感觉非常像一个巨大的 C 代码库,”Karpathy 在他的博客中写道。


这个项目在 GitHub 上可以找到。它使用了 Torch7 的深度学习库。这里有 Karpathy 得到的整个输出文件:https://github.com/karpathy/char-rnn


DeepCoder


微软和剑桥大学的研究人员开发了一种可编写代码的机器学习系统,被称为 DeepCoder,它具有学习的能力。


DeepCoder 可以在庞大的代码库中进行检索,然后编写有效的代码。DeepCoder 所用的技术叫程序合成( program synthesis),通过截取已有软件的代码行来组成新的程序。


不得不承认,当下很多程序员也是这样做的。通过学习一系列代码片(code fragment)的输入和输出数据,DeepCoder 能自动摘取出对目标任务有用的代码片在一秒钟之内写出能够跑通的程序。


随着 DeepCoder 的编程经验增加,其分辨有用及无用的代码片的能力增加,其生成程序的速度将会越来越快。


这并不意味着 AI 是在窃取代码,或者从现有软件复制粘贴代码,或者在互联网上搜索解决方案。DeepCoder 的作者期望它将在不久的将来参与编程竞赛。

由 DeepCoder 创建的域特定语言(DSL)示例程序


DeepCoder 的创造者之一,在剑桥大学参与微软研究项目的 Marc Brockschmidt 表示:“该程序最终可以让非编程人员通过向计算机描述自己的程序构想来获得想要的程序,系统会自动写就。”


你可以在这里找到 DeepCoder 的文档:https://openreview.net/pdf?id=ByldLrqlx


AI 编写 Python 代码


一名法国工程师以 BenjaminTD 的昵称发表了一篇博客文章,解释了自己是如何“教一个 AI 系统如何用 Python 代码编写 Python 代码”。


他使用了长短期记忆网络(LSTM),这是最流行的递归神经网络结构之一。


他用大量的 Python 代码(使用 Pandas、Numpy、Scipy、Django、Scikit-Learn、PyBrain、Lasagne、Rasterio 等库)来“喂给”这个网络。组合文件大小有 27MB。然后,AI 生成了自己的代码。


下面是定义初始化:

...使用布尔表达式:

...并创建数组:

如果仔细观察数组,你会发现有一个语法错误。BenjaminTD 的代码远非完美,但是他认为,对于一个只是从阅读示例代码中学习的网络来说,这些代码看上去不错。


AI Programmer


2017年 ,来自彭博和英特尔实验室的研究人员号称实现了首个能够自动生成完整软件程序的 AI 系统 “AI Programmer”。

AI Programmer 利用机器学习中的遗传算法,模拟复杂的指令。虽然现在 AI Programmer 生成的程序,复杂程度与人类新手程序员编写的结果相当。


但研究人员认为,AI Programmer 编写的程序完全可以超越传统范畴,不受人类时间和智慧的局限。

AI Programmer 的软件架构


从图中可见,由人类驱动的部分非常少,只需要在开始输入指令,最后接收适用于某项任务的函数即可,剩下部分全部由机器完成。


研究人员表示,他们能用 AI Programmer 生成很多软件程序。下表是所生成程序的名单。

看完上文,你有没有想过,如果 AI 失控了会怎么样?下面跟着小编来看一个恐怖的故事,故事中的作者就被“疯魔”了的机器强制解雇了,但是从始至终却没有人能够阻止它。


我竟然被机器强行解雇了!


早上七点,我的手机响了——然而并不是闹钟,扰人清梦的是我的派遣顾问。


这个时候打电话也太早了吧!于是我干脆没接。起床洗了个澡,然后上班。上班路上我打开了她的留言:“哎呀,你没事儿吧?”


我们公司的通讯录上有好几个和我同名同姓的人,所以我对这番莫名其妙的话一点儿反应也没有。所以她一定是打错了。


到了公司之后,我在刷卡机上刷了门卡。伴随着一阵刺耳的滴声,红灯亮了,门没有开。


我又试了几次,每次都是同样的红灯和滴声。我看了眼门卫 Jose,Jose 也看到我了。


他耸了耸肩,过一会儿他大笑起来,按了下桌子下方的按钮,门开了。Jose 是我工作的 LA-1 大厦保安。


我立即给发我短信的派遣顾问回了个电话:

顾问:你昨天跟经理谈话了?

我:是的。

顾问:一切正常?

我:是的,一切正常。出什么问题了?

顾问:不知道,早上我收到了一封关于你的邮件……一定是他们搞错了。他们让你进门了?

我:我不明白。不过他们让我进门了,到底出什么事儿了?

顾问:一定是搞错了,我问问我的经理,过一会儿给你回电话。


这大半年来 Jose 每天都看着我进出那扇大门。我觉得这一定是他想跟我开个玩笑,肯定是他在我刷卡之前禁用了门上的刷卡机。


于是我直接去找经理看看究竟“出了什么问题”:

我:嗨!

Sam(经理):嘿 Ibrahim,今天怎么样?

我:还不错。我刚接到派遣顾问的电话,听说你在找我?

Sam:没有啊!她说是啥事儿了吗?

我:没,她说一会儿给我回电话。我还是先等她电话吧。


结果我没接到她的电话。然后一天无事,似乎平淡乏味的日子又开始了。第二天我在进停车场刷卡的时候又听到了刺耳的滴滴声。


我后面的车排起了长龙,车主们开始变得不耐烦,一些人已经开始冲我按喇叭了。但要想掉头出去却不可能,通道太长了。


正当我手足无措的时候,保安来了,看了我一眼,然后失望地摇了摇头,用他自己的卡刷了下让我进去了。我红着脸一直开到了八层。


进入大楼之后,我的门卡依旧失效,刺耳的滴滴声整个楼层都能听得见。最后还是 Jose 给我开了门。


我的门卡不是第一次失效了,估计该换了,我想。进了工作间之后我去找了经理,她答应立刻给我换一张新卡,同时告诉保安每天早上给我打印一张当天有效的临时通行证。哼,一点小小的代价。


我回到座位上然后在电脑上工作了几个小时。完成工作之后,我登录到另一台 Windows 电脑上去关闭 Jira(一个项目与事务跟踪工具)上的任务,结果发现我被从 Jira 上退出了。这之后,我试了几次重新登录都失败了。


我的楼层门口有张海报,那是一名员工画的纽约客风格的漫画,上面两名员工在自己的格子里对话。


对话内容是:

——Jira 挂了?

——对,Jira 挂了!


Jira 经常挂掉。于是我问了问旁边格子里的同事 Jira 还能不能用。结果他说能用,然后我让他帮我看看我的那个任务。他打开任务后发现,任务里我的名字灰掉了,旁边还有个“(不活跃)”几个字。


经理应该能解决这个问题,不过现在正是午饭时间。于是我去楼下的咖啡厅里买了个黑豆汉堡,这种健康的食物对于像我这种整天坐着工作的人很有好处。出于同样的目的,吃完饭我还去散了个步,这也是每天必做的事儿。


不用说,我回来的时候也顺着楼梯爬到了 11 层。爬楼梯很累,但每天坐着毕竟不好。结果到了 11 层后我发现了个严重的问题:必须刷门卡才能离开楼梯间。


读卡器缓慢地发出了充满挖苦的刺耳声,就像八位游戏机那种声音一样。我被困在楼梯间里了,我坐了十分钟才等到另一个爬楼梯的人帮我开了门,然后我像做贼一样回到了自己的位置上。


就在这时我接到了派遣顾问的电话,她不断向我道歉,还问我是否一切正常。她说她收到了一封邮件说我的合同被中止了,我立刻去找了经理,结果经理很惊讶地表示她没收到任何消息。


她也不明白为什么我的 Jira 账号被禁用了,但系统不让她重新启用我的账号。于是她给 Jira 的技术支持团队建了个任务让他们重新启用我的账号。


回到位置上时,我在屏幕上发现了个可怕的错误消息,让我立刻重启电脑。我没有听,因为我开了几百个窗口,还有好几个编程环境在运行呢。我只是关掉了消息框,我知道一旦重启电脑,我就没法再登录了。


那天余下的时间,我登录到 Confluence(一个企业知识管理与协同软件)中去记录我的工作内容。


第三天,我打了 Uber 上班——我可不想再被卡在停车场门口了。Jose 也没办法给我打印临时通行证,因为在系统里我的名字是红色的。


我的经理得自己到楼下接我上楼。派遣顾问给我发了个消息告诉我别去上班,因为她刚刚收到消息说,我的通行证在我被终止合同后被人使用了。不过我已经进来了,所以我们去找了主管。


究竟出什么事儿了?我是不是被开除了?主管大笑起来。她是个高个儿优雅的女人,浑身上下充满了自信。


她伸了伸胳膊,拿起电话,用同一只手拨了技术支持的号码。她命令他们立刻搞定这些问题,然后挂断了电话,并且向我保证不会有事儿,我可以回去安心工作,在今天之内这一切都会恢复正常。


然而我还没来得及离开她的屋子,就看到她收到了这封邮件:

我被解雇了。就在这时,我工作时使用的那台价值几百万刀的设备出事儿了。


几十万条记录丢失,Web 界面也不响应了。我回到桌子前发现我的 Windows 电脑已经自动重启了(天杀的微软!),我的账号也被禁用了。


幸好我还有一台 CentOS 的机器。平常用来开发的工具也不能用了,我只能黑进我的服务器去重启,调试,重启所有访问,然后重新处理所有数据。


离开大楼之前我去找主管,发现她还在跟支持团队打电话。她肯定地说让我明天继续来上班。


第四天,除了我的 Linux 机器之外,我已经不能登录任何系统了。就连我们用来登记工时以便索取报酬的系统也不能用了。所以整个上午我只能写文档。


吃过午饭之后,两个人出现在我的桌子前。其中一个长着我熟悉的长脸,竭力避免跟我目光接触,正是 Jose 和他的保安同事。


他说他是来送我出大楼的。保安们说他们收到了一封非常吓人的邮件,要求把我送出大楼,他们只是照章办事而已。


主管怒了。“究竟是谁发的邮件!?”我被解雇了。我的经理毫无办法,主管也毫无办法,她们只能无助地看着我收拾东西离开。


接下来三个星期内,她们把每封相关的邮件都抄给了我。我看着这件事一层层被上报至越来越高级的头衔,但无论谁都束手无策。


每次转发他们都会附上一封系统邮件,那毫无灵魂的红字决定了我的命运。禁用这个,禁用那个,取消这个权限,取消那个权限,驱逐出大楼,等等。


系统失控了,我是第一个受害者。我在那里工作了八个月以上,我的工作本身就证明了我自己。


人们都在夸奖我,赞美我的工作。与每个人的关系也都非常融洽,我相信我没有对任何人做错任何事……不过这让我想起了脆弱的工作安全。


最终,问题解决了。一天早上,派遣顾问联系我说我可以回去工作了,但我已经失去了三个星期的时间,还有报酬。到了公司后,他们向我解释了一切。


一旦员工合同中止的工作单发出后,系统就会接管一切。所有中止合同所需的工作单会自动发出,每个都会触发其他的工作单。


比如,禁用门卡的工作单发出后,就没办法再恢复了。门卡一旦禁用,系统就会发邮件告诉保安被禁用的员工,而我的门卡也不能再刷了。紧接着就会发送禁用 Windows 账号的工作单,还有禁用 Jira 账号的工作单,等等。


而这个长达几天的过程没有任何方法能中止。我只能以新员工的方式被重新雇佣,意味着我得重新填写各种文件,设置银行卡账号,等联邦快递给我发送新的门卡。


但最终的问题是,我究竟是怎样被中止的?我的合同期限是三年,而我仅工作了八个月。


就在我被雇佣之前,公司被一家更大的公司收购,而我正是在收购的过程中加入的。我当时的经理是以前管理团队的一员。一天早上我上班时,发现他的办公桌被清理干净了,仿佛他根本不存在一样。


作为全职员工,他被裁掉了。但在公司被收购的过程中,他需要以合同工的身份在家里工作。


我估计,受到裁员的影响,他肯定无心工作,于是一些事情就被忽略了,而在系统中给我的合同续约,正是被忽略的工作之一。


我对这份工作很满意。我已经彻底地学会了工作所用的整个系统,还在工作中交了许多朋友,制定了工作的流程,成了同事们可以依靠的人。总的来说,我非常满意。


但当合同到期时,机器接管了一切然后解雇了我。一个简单的自动化错误(或者说,功能?)导致了雪崩。


我像个贼一样被送出大楼,还得跟人解释为什么没去上班,跟同事的关系也疏远了(除了我的经理变得极其支持我)。


尽管在这样一家大公司工作对于我来说是个极好的机会,我还是决定下一次考虑别的工作。


我所谓的“工作安全”只是一个幻影。我不禁开始想,如果我真的在公司犯了错误会发生什么。


自动化也许是公司的财富,但当机器犯错误时,人必须能够干预。正因为没人能阻止机器,导致我失去了三周的报酬。


一年之后的今天,我终于可以坐下来平静地讲这个故事了。这就是我被机器解雇而人类束手无策的故事。


以上即为作者 Ibrahim Diallo 个人的真实经历,认真地工作却被“强大”的机器系统强制解雇了。


而事实上,Hacker News 上的很多开发者都有过相似的经历,他们也有被无处不在的智能系统玩弄过。


潜在的威胁:不确定机器能做到什么程度


虽然现在已经有程序可以代替人类了,但随之而来的问题是,如果机器能够自己学习,他们能学到多少?极限在哪里?


这个优化的过程真的能教软件比人更好地写代码吗?网站开发机构和软件公司是否会利用 AI 驱动的程序为自己编写代码,以节省资金?


事实是,我们还不确定机器能做到什么程度。但是,我们知道人工智能已经在影响 IT 行业的一些工作。


印度软件咨询和外包公司 Wipro Ltd. 自去年 6 月以来使用 AI 平台 Holmes 来维护软件,其 3000 多名工程师因此担心他们的工作。


更不用说,我们经常使用的许多技术都采用机器学习技术——从语音识别到机器翻译。


AI 和人类程序员将在编程中扮演互补的角色


人工神经网络的一个问题是它们使用的算法是“黑盒”,这意味着它们内部的工作方式太过复杂。


特斯拉的 AI 总监 Andrej Karpathy 认为,对于大多数应用领域,我们永远无法得到完全由 AI 驱动的 100% 精确的模型。


他认为 AI 系统的准确率将超过 90%,但它们并不完美,它们偶尔会以出人意料的方式失败。


一般来说,有监督和有人控制的深度学习系统比无监督的系统表现更好。这意味着,即使是最复杂的 AI 软件也需要人类的参与和反馈,以学习和适应新的环境。


这个事实为未来人工智能和人类程序员之间的紧张关系提供了一种解决方案——共同工作。

我们可以肯定的是,在不久的将来,AI 和人类程序员将在编程中扮演互补的角色。


AI 的工作可能是处理重复性的、耗时的任务,这些任务需要机器优异的精确性。机器可以避免由于人为因素而产生的语法错误或设计错误。


例如,AI 可以提供帮助的一种方式是自动完成功能,程序员只编写一小部分代码,然后 AI 识别程序员的意图,并完成剩下的代码,从而为人类节省大量的工作。


即使机器能够完全代替今天程序员所做的工作,但这并不意味着它们不需要人类的帮助。


但程序员必须将注意力从编写程序转移到监控 AI 的性能,并将数据“喂给”AI。


正如 Karpathy 所指出的,程序员可能会成为一种数据加持者——收集、整理和分析数据,然后将它们用作 AI 的输入,然后让 AI 完成剩下的工作。


福利来啦

你觉得你现有的工作会被AI取代吗?作为传统程序员到底要不要转行到AI?欢迎底部留言探讨,小编将选出留言最精彩的10名网友,送出《揭秘深度强化》图书一本~活动截止时间 7 月 16 日十二时整,特别鸣谢中国水利水电出版社为本次活动提供的图书赞助。


书籍简介

《揭秘深度强化学习 人工智能机器学习技术丛书》是一本详细介绍深度强化学习算法的入门类图书,涉及深度学习和强化学习的相关内容,是人工智能前沿的研究方向。非常适合想在下一代技术领域立足的人工智能和机器学习算法从业者学习和参考。


该书囊括了强化学习基础知识、马尔科夫决策过程、无模型强化学习、模仿学习、深度学习基础知识、神经网络基本组成、反向传播算法、功能神经网络层、循环神经网络、卷积神经网络(CNN)的基础和结构、循环神经网络(RNN)、深度强化学习基础、蒙特卡洛搜索树、策略梯度算法、深度强化学习算法框架、深度Q学习、双Q学习、异步优越性策略子-评价算法、深度强化学习应用实例等。

精彩文章推荐:

从普通程序员到AI大神,月薪7W的正确打开方式...

一致性哈希算法很难?看完这篇全懂了

“码农”和“码神”差距在6月的这十篇热门文章

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存